#include <iostream>
using namespace std;
const int N = 100010, M = 1000010;
char P[N], S[M];
int ne[N];
int n, m;

int main()
{
    scanf("%d", &n);
    cin >> P + 1;
    scanf("%d", &m);
    cin >> S + 1;
    for (int i = 2, j = 0; i <= n; ++i) //ne[1]默认等于0，因为在1已经退无可退，只能重头开始
    {
        while (j && P[i] != P[j + 1])
            j = ne[j];
        if (P[i] == P[j + 1])
            ++j;
        ne[i] = j;
    }
    for (int i = 1, j = 0; i <= m; ++i)
    {
        while (j && S[i] != P[j + 1])
            j = ne[j];
        if (S[i] == P[j + 1])
            ++j;
        if (j == n)
        {
            printf("%d ", i - n); //原本位置应该是作差加一，但是由于下标本来就是从一开始的，所以要减一，就成了i-n
            j = ne[j];
        }
    }
    return 0;
}